package com.meilingcloud.biobank.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.meilingcloud.biobank.domain.SampleBackup;
import com.meilingcloud.biobank.domain.dto.SampleCreateSaveDto;
import com.meilingcloud.biobank.domain.dto.SampleImportDto;
import com.meilingcloud.biobank.domain.dto.SampleQueryDto;
import com.meilingcloud.biobank.domain.dto.StatisticDto;
import com.meilingcloud.biobank.domain.vo.*;

import java.util.List;

/**
 * 样本复份 Service接口
 *
 * @author chenl
 * @date 2021-03-08
 */
public interface ISampleBackupService extends IService<SampleBackup> {

    /**
     * 查询列表
     */
    List<SampleBackup> queryList(SampleQueryDto sampleQueryDto);

    /**
     * 查询样本复份列表，包含已删除
     *
     * @param sampleQueryDto sampleQueryDto
     * @return lsit
     */
    List<SampleBackup> queryListIncludeDeleted(SampleQueryDto sampleQueryDto);

    /**
     * 保存样本
     */
    boolean saveSample(SampleCreateSaveDto sampleCreateSaveDto);

    /**
     * 分页插件查询结果后不能再处理数据，会导致total=pageSize，数据处理单独提取出来
     */
    List<SampleBackup> handleResult(List<SampleBackup> sampleBackups);

    /**
     * 根据qrCode查询样本信息
     */
    SampleBackup queryByQrCode(SampleBackup sampleBackup);

    /**
     * 获取同样本其他复份信息
     */
    List<SampleBackup> querySameSamples(SampleBackup sampleBackup);

    /**
     * 导入样本
     */
    String importSample(List<SampleImportDto> sampleImportDtos, Boolean isUpdateSupport);

    /**
     * 根据样本类型统计 样本总数+已使用样本
     */
    List<SampleStatisticVo> statisticByType();

    /**
     * 获取样本出入库、转移的生命周期
     */
    List<SampleLifeCycleVo> getSampleLifeCycle(Long sampBackupId);

    /**
     * 根据样本类型统计在库样本
     */
    List<StatisticVo> chartByType(String sampState);

    /**
     * 根据样本源类型统计在库样本
     */
    List<StatisticVo> chartBySourceType(String sampState);

    /**
     * 根据样本组统计在库样本
     */
    List<StatisticVo> chartByGroup(String sampState);

    /**
     * 根据创建人统计在库样本
     */
    List<StatisticVo> chartByCreator(String sampState);

    /**
     * 根据采样时间统计在库样本
     */
    List<StatisticVo> chartBySamplingTime(StatisticDto dto);

    /**
     * 根据出入库时间统计样本数
     */
    List<StatisticVo> chartByStockTime(StatisticDto dto);

    /**
     * 过期样本统计
     */
    List<StatisticVo> chartByExpired();

    /**
     * 根据样本类型统计报表
     */
    List<SampTypeReportVo> reportBySampType(StatisticDto dto);

    /**
     * 根据样本源类型统计报表
     */
    List<SourceTypeReportVo> reportBySourceType(StatisticDto dto);

    /**
     * 根据样本组统计报表
     */
    List<SampGroupReportVo> reportBySampGroup(StatisticDto dto);

    /**
     * 统计样本总数
     */
    Integer statisticSampleCount();

    /**
     * 根据id查询样本复份,可查询已删除
     *
     * @param sampleBackupId sampleBackupId
     * @return result
     */
    SampleBackup getInfoById(Long sampleBackupId);

    boolean updateSampleBackup(SampleBackup sampleBackup);
}
